/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package trabalho4paradigmas;

import cliente.Cliente;
import cliente.ListaCliente;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import mercadoria.ListaMercadoria;
import mercadoria.Mercadoria;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import relatorio.Relatorio;
import venda.ListaVenda;
import venda.Venda;

/**
 *
 * @author Luis Henrique
 */
public class Controle {
    
    ArrayList<Cliente> listaCliente = new ArrayList<Cliente>();
    ArrayList<Mercadoria> listaMercadoria = new ArrayList<Mercadoria>();
    ArrayList<Venda> listaVenda = new ArrayList<Venda>();
    ArrayList<Mercadoria> listaInicialMercadoria = new ArrayList<Mercadoria>(0);
        //Inicializa objeto e carrega Arquivos
    carregaArquivos arquivos = new carregaArquivos();
    

    public Controle() throws IOException {
        
        arquivos.leArquivo(listaCliente,listaMercadoria,listaVenda);
        sincronizaListas();
        System.out.println("1"+listaCliente);
        System.out.println("2"+listaMercadoria);
        System.out.println("3"+listaVenda);
    }

    public ArrayList<Mercadoria> getListaInicialMercadoria() {
        return listaInicialMercadoria;
    }
    
    public void grava() throws IOException{
        arquivos.gravaArquivo(listaCliente, listaMercadoria, listaVenda);
    }
    
    public ArrayList<String> getNomeClientes(){
        ArrayList <String> nomes = new ArrayList();
        for(Cliente c:listaCliente){
            nomes.add(c.getNomeCliente());
        }
        System.out.println(nomes.toArray());
        return nomes;
    }
    
    public ArrayList<String> getNomeProdutos(){
        ArrayList <String> nomes = new ArrayList();
        for(Mercadoria c:listaMercadoria){
            nomes.add(c.getNomeItem());
        }
        System.out.println(nomes.toArray());
        return nomes;
    }
    
    public boolean Cadastracliente(String nomeCliente, String enderecoCliente, String fone)
    {
         //cadastra cliente
               
                int foneCliente = Integer.parseInt(fone);
                Cliente cliente = new Cliente(nomeCliente, 
                        enderecoCliente, foneCliente);
                if(ListaCliente.BuscarCliente(cliente, listaCliente) == true)
                    return false;
                else{
                    listaCliente.add(cliente);
                    for(Cliente l:listaCliente){
                    System.out.println("\nnome: " +l.getNomeCliente()+ "\nendereco: " 
                   + l.getEnderecoCliente() + "\nFone: " +l.getFoneCliente() 
                   + "\n" ); 
                    }
                }
        return true;
    
    }
    
    public boolean CompraProduto(String nomeItem, String quantidadedItem,String valItem)
    {
        int qtdItem= Integer.parseInt(quantidadedItem);
        ListaMercadoria mer = new ListaMercadoria();
        if(mer.buscaMercadoria(nomeItem, qtdItem, listaMercadoria) == true){
            return false;
        }else{
            float precoItem = Float.parseFloat(valItem);
            Mercadoria produto = new Mercadoria(nomeItem, 
            qtdItem, precoItem);
            listaMercadoria.add(produto);
            //sincronizaListas();
            //retirar
                for(Mercadoria m:listaMercadoria){
                    System.out.println("\nMercadoria: " + m.getNomeItem()
                    + "\nQuantidade: " + m.getQtdItem()+
                    "\nPreco: " + m.getPrecoItem() + "\n");
                }
            }
        return true;
    }
    
    public boolean Vendas (String nomeCliente, ArrayList<Mercadoria> listaVendaCliente)
    {
        float ValTot = 0;
        Cliente cl = null;
        Venda venda = new Venda ();
        ListaVenda ven = new ListaVenda();
        ven.realizaVenda(listaCliente, 
                        listaMercadoria, listaVendaCliente, cl, venda, 
                        nomeCliente, ValTot);
        //Testa se objeto venda não e vazio
        if(venda.getNomeCliente()!= null && venda.getListaComprasCliente() != null){
            //Adiciona na lista de venda
            listaVenda.add(venda);
        
        }
        return true;
    }
    
    public ArrayList<Mercadoria> RelatorioVendasCliente(String nomeCliente){
        Relatorio relatorioCliente = new Relatorio();
        return relatorioCliente.relatorioCliente(listaCliente, listaVenda, 
                        nomeCliente);
        
    }
    
    public ArrayList<Cliente> RelatorioVendasProdutos(String nomeItem){
        Relatorio relatorioItem = new Relatorio();
        return relatorioItem.relatorioItem(listaVenda, nomeItem);
    }
    
    public ArrayList<Mercadoria> RelatorioEstoque(){
        Relatorio relatorioEstoque = new Relatorio();
        relatorioEstoque.relatorioEstoque(listaMercadoria);
        return listaMercadoria;
        
    }
    
    public float RelatorioEntradas(){
        Relatorio relatorioEntradas = new Relatorio();
        return relatorioEntradas.ralatorioEntradas(listaVenda);
    }
    
    public float RelatorioSaidas(){
        Relatorio relatorioSaidas = new Relatorio();
        return relatorioSaidas.relatorioSaidas(listaMercadoria);
    }
    
    public void sincronizaListas(){
       Mercadoria produto;
       for(Mercadoria m:listaMercadoria){
           produto = new Mercadoria();
           produto.setNomeItem(m.getNomeItem());
           produto.setQtdItem(m.getQtdItem());
           listaInicialMercadoria.add(produto);
           
       }
    }
    
    public ArrayList<Mercadoria> VendasporProduto(){
        ArrayList<Mercadoria> resultado = new ArrayList<>();
        for(Mercadoria m:listaMercadoria){
            for(Mercadoria mi:listaInicialMercadoria){
                if(m.equals(mi)){
                    Mercadoria mer=new Mercadoria();
                    mer.setNomeItem(mi.getNomeItem());
                    mer.setQtdItem(mi.getQtdItem()- m.getQtdItem());
                    resultado.add(mer);
                    System.out.println("Teste "+mer.getNomeItem()+"  "+mer.getQtdItem());
                }
              
            }
        }
        System.out.println("Resultado "+resultado);
        return resultado;
    }
    
    /*public ArrayList<Cliente> Top5Clientes(ArrayList<Venda> produtos){
        
        for(Venda c:produtos){
            if(c.getNomeCliente().getNomeCliente().equals(c))
        }
        return null;
    }*/
    
    public void geraGraficoVendasProdutos(){
        ArrayList<Mercadoria> dadosGrafico = VendasporProduto();
        DefaultCategoryDataset DataSet = new DefaultCategoryDataset();
        System.out.println("G ");
        for(Mercadoria m:dadosGrafico){
            
            DataSet.setValue(m.getQtdItem(), "Produtos", m.getNomeItem());
        }
        JFreeChart chart= ChartFactory.createBarChart
        ("Produtos Vendidos", "Salesmam", "Produtos", DataSet, 
                PlotOrientation.VERTICAL, false,true, false);
        try {
            ChartUtilities.saveChartAsJPEG(new File("GráficoVendaProdutos.jpg"), chart, 500, 300);
        } catch (IOException ex) {
            Logger.getLogger(Controle.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
